<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 构造函数Array的方法   
  // Array.from()   传入一个伪数组 返回对应的真数组
  // Array.of()     方法用于将一组值，转换为数组。 

  // Array.of(3, 11, 8) // [3,11,8]    等价于 new Array(3, 11, 8)
  // Array.myOf = function(){     //模拟封装
  //     console.log(arguments);
  //     return new Array(...arguments);
  // }

  // forEach map filter some every reduce  数组的遍历方法
  // var list = [2,8,4,6,5,7,9,3,1];

  // list.forEach(function(item,index){
  //     console.log(item,index);
  // })


  // find()        遍历数组,每次循环时,执行传入的回调函数,回调函数return一个条件, 返回满足条件的第一个元素  不存在则返回 undefined 
  // findIndex()   遍历数组,每次循环时,执行传入的回调函数,回调函数return一个条件, 返回满足条件的第一个元素的下标    不存在则返回 -1

  // 对比indexOf 和 includes   
  // indexOf 和 includes  查找具体的元素 list.indexOf(1)
  // find()  findIndex()  查找满足条件的元素 和 对应的下标

  var list = [2, 8, 4, 6, 5, 7, 9, 3, 1];
  var result = list.find(function (item, index, array) {
    return item % 2 == 0 && item % 5 == 0;
  })
  // console.log(result);

  var index = list.findIndex(function (item, index, array) {
    return item % 2 == 0 && item % 5 == 0;
  })
  // console.log(index);


  // fill()  使用给定值，填充一个数组。  
  // 返回值   被修改的原数组
  // 是否影响原数组  影响

  // var list = [2,8,4,6,5,7,9,3,1];

  // for(var i=0;i<list.length;i++){
  //     list[i] = 0;
  // }
  // console.log(list);

  // var result = list.fill(0);
  // console.log(result);
  // console.log(list);

  // [,,,,,,,,,,,,]
  // var arr = new Array(100).fill(false);
  // console.log(arr);

  // includes()    判断数组中是否存在某个元素   (可用于判断数组中是否存在NaN)

  // var list = [2,8,4,6,5,7,9,3,1,NaN];

  // console.log(list.indexOf(1));
  // console.log(list.indexOf(NaN));

  // console.log(list.includes(1));
  // console.log(list.includes(NaN));


  // flat()   用于将嵌套的数组“拉平”，变成一维的数组。该方法返回一个新数组，对原数据没有影响。
  // 可以理解为 取出多维数组中的每一个元素 放到新数组中  

  // flat()默认只会“拉平”一层，如果想要“拉平”多层的嵌套数组，可以将flat()方法的参数写成一个整数，表示想要拉平的层数，默认为1。
  // 如果不管有多少层嵌套，都要转成一维数组，可以用Infinity关键字作为参数。

  // var arr = [1,2,[3,4]];
  // var result =  arr.flat();
  // console.log(result);

  // var arr = [1,2,[3,4,[5,6]]];
  // var result = arr.flat(2);
  // console.log(result);

  // var arr = [1,2,[3,4,[5,6,[7,8,[9,10,[11,12]]]]]];
  // // var result = arr.flat(5);
  // var result = arr.flat(Infinity);
  // console.log(result);

  // flatMap()   map和flat的组合版  => 现根据原数组生成新数组,在把新数组拉平返回

  var list = [2, 8, 4, 6, 5, 7, 9, 3, 1];
  // var arr  = list.map(function(item,index){
  //     return [index,item];
  // })
  // console.log(arr);
  // var brr = arr.flat();
  // console.log(brr);

  var brr = list.flatMap(function (item, index) {
    return [index, item];
  })
  console.log(brr);
</script>

</html>